在前面幾天,使用了許多預訂的信號,但實際上,我們也是可以自訂信號,以滿足特定的需求
在進入步驟之前,先簡單了解一些功能
Signal(type)
: 創建一個信號,裡面設定的參數類型,是要傳入槽函數裡的參數類型。例如,Signal(int) 表示信號會傳遞一個整數emit()
: 發出信號,括號中放要傳遞的數據。PySide6.QtCore
导入 QObject
和 Signal
。QObject
並在裡面添加自訂的信號。如果傳入的是5的話,就會觸發信號,否則會列印 「數字不對」
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton
from PySide6.QtCore import QObject, Signal
ifValue5 = Signal(int)
,他會將整數值傳遞給槽函數。同時創建判斷函數 Is5
如果是 5 會發送信號,否則會列印「數字不對」。class MyObject(QObject):
# 自訂信號,設定數據類型是整數
ifValue5 = Signal(int)
# 判斷是不是5的函數
def Is5(self, value):
if value == 5:
self.ifValue5.emit(5)
else:
print("數字不對")
class MyWindow(QWidget):
def __init__(self):
super().__init__()
# 創建元件
self.lb = QLabel("0")
self.btn = QPushButton("Set to 3")
self.btn2 = QPushButton("Set to 5")
# 連結 Object
self.object = MyObject()
self.object.ifValue5.connect(self.setText)
# 點按鈕信號
self.btn.clicked.connect(self.Set3)
self.btn2.clicked.connect(self.Set5)
# 佈局
self.layout = QVBoxLayout()
self.layout.addWidget(self.lb)
self.layout.addWidget(self.btn)
self.layout.addWidget(self.btn2)
self.setLayout(self.layout)
def Set3(self):
self.lb.setText("3")
self.object.Is5(int(self.lb.text()))
def Set5(self):
self.lb.setText("5")
self.object.Is5(int(self.lb.text()))
def setText(self,value):
print("數字正確")
self.lb.setText(f"數字設定成{str(value)}")
自訂信號會用到
自訂信號的步驟
PySide6.QtCore
导入 QObject
和 Signal
。QObject
並在裡面添加自訂的信號。